Запрет редактирования полей таблицы по условию

#std399

Область применения: управляемое приложение.

Методическая рекомендация (полезный совет)

В некоторых случаях требуется предупредить пользователя о том, что ввод тех или иных данных в таблице управляемой формы не имеет смысла или вообще не может быть выполнен до заполнения других полей таблицы. В таких случаях рекомендуется применять описанный ниже прием.

  • Для предупреждения пользователя применять свойства поля ОтображениеПредупрежденияПриРедактировании и ПредупреждениеПриРедактировании
  • Текст предупреждения указать в свойстве поля формы при разработке формы в конфигураторе.
  • Управлять свойством ОтображениеПредупрежденияПриРедактировании из встроенного языка при активизации строки таблицы и при изменении тех значений, которые влияют на условие редактирования поля
  • Дать пользователю возможность редактирования уже введенное значение, даже если оно введено "не по правилам", для того, чтобы пользователь мог удалить ранее введенное значение.

Например, в таблице формы Затраты имеются поля СтатьяЗатрат и АналитикаСтатьиЗатрат. При этом заполнение поля АналитикаСтатьиЗатрат не имеет смысла без заполнения поля СтатьяЗатрат. Тогда код формы может включать примерно следующие процедуры.

&НаКлиенте
Процедура УстановитьПредупреждениеПриРедактировании() 
   Если НЕ ЗначениеЗаполнено(Элементы.Затраты.ТекущиеДанные.СтатьяЗатрат) Тогда 
      Если НЕ ЗначениеЗаполнено(Элементы.Затраты.ТекущиеДанные.АналитикаСтатьиЗатрат) Тогда
         Элементы.ЗатратыАналитикаСтатьиЗатрат.ОтображениеПредупрежденияПриРедактировании =
           ОтображениеПредупрежденияПриРедактировании.Отображать;
      Иначе 
         Элементы.ЗатратыАналитикаСтатьиЗатрат.ОтображениеПредупрежденияПриРедактировании =
           ОтображениеПредупрежденияПриРедактировании.НеОтображать;
      КонецЕсли; 
   Иначе 
      Элементы.ЗатратыАналитикаСтатьиЗатрат.ОтображениеПредупрежденияПриРедактировании = 
        ОтображениеПредупрежденияПриРедактировании.НеОтображать;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗатратыПриАктивизацииСтроки(Элемент)
   УстановитьПредупреждениеПриРедактировании();
КонецПроцедуры

&НаКлиенте
Процедура ЗатратыСтатьяЗатратПриИзменении(Элемент)
   УстановитьПредупреждениеПриРедактировании()
КонецПроцедуры

&НаКлиенте
Процедура ЗатратыАналитикаСтатьиЗатратПриИзменении(Элемент)
   УстановитьПредупреждениеПриРедактировании()
КонецПроцедуры

В том случае если от некоторых условий зависит не только сама необходимость предупреждения, но и текст самого предупреждения, следует управлять из встроенного языка не только свойством поля ОтображениеПредупрежденияПриРедактировании, но и свойством ПредупреждениеПриРедактировании.